/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package edu.uoc.tfc.exuoc.model;


import edu.uoc.tfc.exuoc.config.Config;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.JoinColumn;

import javax.persistence.AssociationOverride;
import javax.persistence.AssociationOverrides;
import javax.persistence.EmbeddedId;
import javax.persistence.Transient;

import java.io.Serializable;
/**
 *  Classe que serveix per relacionar els JB Item i MetaDC
 * Degut a la relació que existeix entre ells N-M i que obliga a guardar un
 * valor com és el valor de la metadada triada a l'hora de crear un item, tenim
 * que hibernate no admet que es pugui guardar un valor fent servir aquest tipus
 * de relació. Per tant cal generar dues relacions 1-N fent servir una taula
 * auxiliar, Metadades_detalls, la qual permetra guardar aquest valor entre
 * d'altres.
 *
 * @author Emili A. Moreno Ruiz
 */

@Entity
@Table(name = "metadades_detalls")
@AssociationOverrides({
@AssociationOverride(name = "pk.item", joinColumns = @JoinColumn(name = "iditem")),
@AssociationOverride(name = "pk.metadc", joinColumns = @JoinColumn(name = "iddublincore"))
        })
public class MetadadaDetall implements Serializable {
    private static final long serialVersionUID = 3245235352382L;
    private MetadadaDetallPk pk = new MetadadaDetallPk();
    private String valor=Config.valorNullStr;

    @EmbeddedId
    private MetadadaDetallPk getPk() {
        return pk;
    }

    private void setPk(MetadadaDetallPk pk) {
        this.pk = pk;
    }

    @Transient
    public Item getItem() {
        return getPk().getItem();
    }

    public void setItem(Item item) {
        getPk().setItem(item);
    }

    @Transient
    public MetaDC getMetaDC() {
        return getPk().getMetaDC();
    }

    public void setMetaDC(MetaDC metadc) {
        getPk().setMetaDC(metadc);
    }

    public String getValor() {
        return valor;
    }

    public void setValor(String valor) {
        this.valor = valor;
    }

    
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        MetadadaDetall that = (MetadadaDetall) o;

        if (getPk()!=null ? !getPk().equals(that.getPk()):that.getPk() != null)
            return false;
        if (getValor()!=null ? !getValor().equals(that.getValor()):that.getValor()!=null)
                return false;
        return true;
    }

    @Override
    public int hashCode() {
        return (getPk() != null ? getPk().hashCode() : 0);
    }


}
